"""
 def initialize(self,'url路由参数','url路由参数'):#URL路由参数的名字必须要与这儿的名字相同
    self.greeting = greeting
    self.info = info
"""

# ｔｏｒｎａｄｏ路由列表的演示
import time
from abc import ABC
import sys
from random import random

import requests
import urllib
import os
import json
from idlelib import query
from urllib.parse import urlencode

import tornado
import tornado.httpclient
from asyncio import ensure_future

from tornado.web import RequestHandler

from common.QRCodeUtil import QRCodeUtil
from views import LoginHandler
from views.ViewRouterInterface import ViewRouterInterface

from dbConnection.Mysql import Mysql


# 下载网络文件（图片）
def request_download(imgUrl, imaNam):
    if not os.path.exists('images'):
        print('创建文件夹:{}'.format('images'))
        if not os.path.exists('images'):
            os.makedirs('images')
    r = requests.get(imgUrl)
    with open('./images/' + imaNam, 'wb') as f:
        f.write(r.content)


# 用来响应用户请求
class IndexHandler(ViewRouterInterface, RequestHandler, ABC):
    # 响应以ｇｅｔ方式发起的请求
    def get(self, *args, **kwargs):
        print(sys.getdefaultencoding())  # 系统默认编码格式
        mySql = Mysql()
        sqlStr = 'select imageName, imageUrl, articleId from imge_data t'
        params = {
            # "id": 2
        }
        result = mySql.getAll(sqlStr, params)
        if result:
            print('get all')
            for row in result:
                self.write('<a target=_blank href=' + bytes(row['imageUrl']).decode("UTF-8") + '>' + bytes(
                    row['imageName']).decode("UTF-8") + '</a><br>')
                # print("当前下载文件：%s \t %s" % (bytes(row['imageName']).decode("UTF-8"),
                #                            bytes(row['imageUrl']).decode("UTF-8")))
                # 下载文件
                # request_download(bytes(row['imageUrl']).decode("UTF-8"), bytes(row['imageName']).decode("UTF-8"))
        # 增加一个异步任务 client = tornado.httpclient.HTTPClient() client = tornado.httpclient.AsyncHTTPClient() response =
        # client.fetch("http://search.twitter.com/search.json?" + urlencode({"q": query, "result_type": "recent",
        # "rpp": 100}), callback=self.on_response) ensure_future().add_done_callback()

        # body = json.loads(response.body)
        # print(body)

        # bar = Bar()
        # bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        # bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
        # render 会生成本地 HTML 文件，默认会在当前目录生成 render.html 文件
        # 也可以传入路径参数，如 bar.render("mycharts.html")
        # bar.render()
        # 　服务器给浏览器的响应内容
        self.write('<a href=/python>hello python</a>')
        img = QRCodeUtil.qr_code_3()
        m_str = bytes(img).decode("UTF-8")
        self.write('<img src=data:image/jpeg;base64,' + m_str + '>')

        # 定义一个表单
        html = """"
               <form method="post" action="/login" enctype="multipart/form-data">
               <input type="text" name="name"><br><br>
               <input type="password" name="password"><br><br>
               <input type="file" name="avatar"><br><br>
               <input type="submit" value="提交">&nbsp;&nbsp;&nbsp;
               <input type="reset" value="重置">
               </form>'
               """

        self.write(html)

        # 渲染视图
        self.render('login.html')

    # 响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

    # 路由
    def configRouter(self):
        return [
            ('/', IndexHandler)
        ]

# 定义一个变量，用来代表端口号
# define('port', type=int, default=8888, multiple=False)
# 定义一个变量，用来代表数据库的连接信息(用户名，密码，端口号，数据库名称)
# define('db', multiple=True, type=str, default=[])
# 从指定的配置文件中，读取ｐｏｒｔ的内容
# parse_config_file('config')

# 创建Ａｐｐｌｉｃａｔｉｏｎ对象，进行若干个对服务器的设置
# 例如：路由列表，模板路径，静态资源路径等

# app = Application([('/', IndexHandler),
#                    # 加上url之后，我们就可以为url设置一个name属性
#                    url('/java', JavaHandler, {'greeting': '你好', 'info': '家蛙'}, name='java_url'),
#                    ('/python', PythonHandler)])
# 创建服务器程序
# server = HTTPServer(app)
# 服务器监听某个端口(建议使用１００００以上的端口)
# server.listen(options.port)  # 10000
# 打印获得的数据库参数
# print('数据库参数：', options.db)
# 启动服务器（在当前进程中启动服务器）
# IOLoop.current().start()
